<?php
namespace app\single\controller;
use jwt\Jwt;
/**
 * #虚拟金币 {关于虚拟金币相关}
 */
class Coin extends Common{
    /**
     * 可购虚拟币列表
     * @return [type] [description]
     */
    function index(){
        $module=model('artmodule')->read(['name'=>request()->module()],'id');
        $map=['status'=>1];
        if(isset($module['id'])){
            $map['module_id']=$module['id'];
        }
        $list=model($this->table)->readAll($map,0,['field'=>'id,name,remark,money,raw_money,label']);
        return json('',0,$list);
    }
    /**
     * 购买虚拟币 
     * @param  integer $coin_id 虚拟币ID
     * @param  integer $cid 优惠卷列表memberCoupon 返回的ID
     * @param  string  $pay_type 支付方式（alipay、weixinpay）
     * @return [type]       [description]
     */
    function buy($coin_id=0,$cid=0,$pay_type='alipay'){
        $pay_types=['alipay','weixinpay'];
        if(!in_array($pay_type, $pay_types)){
            return json('不支持的支付方式',1);
        }
        if($coin_id<=0){
            return json('项可能已经删除',1);
        }
        $map=[
            'id'=>$coin_id,
            'status'=>1,
        ];
        $module=model('artmodule')->read(['name'=>request()->module()],'id');
        if(isset($module['id'])){
            $map['module_id']=$module['id'];
        }
        $has=model($this->table)->read($map,'id,name,money,coin,extra_coin,y,m,d');
        if(empty($has)){
            return json('该项可能已经关闭',1);
        }
        $uid=$this->user['id'];
        $user=model('member')->read(['id'=>$uid],'pid,tel');

        // 增加的时长（单位：s）
        $overTime=addDuration($has['y'],$has['m'],$has['d'],true);
        
        $time=time();
        
        // 生成订单
        $number=model('order')->number();
        $data=[
            'uid'=>$uid,
            'pid'=>$user['pid'],
            'tel'=>$user['tel'],
            's_time'=>$time,
            'expire_time'=>$time+60*86400, //到期时间2个月
            'number'=>$number,
            'vid'=>$has['id'],
            'cid'=>0,
            'coupon_money'=>0, //优惠卷低扣金额
            'money'=>$has['money'], //用户付款金额
            'raw_money'=>$has['money'],
            'ratio'=>$has['coin']+$has['extra_coin'],
            'time'=>$overTime,
            'type'=>2,
            'pay_type'=>$pay_type,
        ];
        
        $add=model('order')->add($data);

        if($add){
            if($pay_type==='alipay'){
                $res=alipay([
                    'subject'=>lang('coin').$has['name'],
                    'out_trade_no'=>$data['number'],
                    'total_amount'=>$data['money'],
                ]);
                logger('info',lang('user create order',[
                    lang('coin'),
                    $user['tel'],
                    $data['money'],
                    lang('coin'),
                    lang('coin').$has['name'],
                ]));
                return json('订单创建成功',0,['number'=>$res]);
            }elseif($pay_type==='weixinpay'){
                $res=weixinpay([
                    'body'=>lang('coin').$has['name'],
                    'out_trade_no'=>$data['number'],
                    'total_fee'=>$data['money']*100, //单位：分
                ]);
                if($res['success']){
                    $res_data=$res['data'];
                    $res_data['wx_package']=$res_data['package'];
                    unset($res_data['package']);
                    $res_data['order_number']=$data['number'];
                    logger('info',lang('user create order',[
                        lang('coin'),
                        $user['tel'],
                        $data['money'],
                        lang('coin'),
                        lang('coin').$has['name'],
                    ]));
                    return json('订单创建成功',0,$res_data);
                }
                return json($res['msg'],1);
            }else{
                return json('不支持的支付方式',1);
            }
        }
        return json('系统繁忙订单创建失败',1);
        
    }
    /**
     * 付款成功后通过该接口获取验证用户是否付款
     * 该接口将返回一个新的token以及数据，前端应该替换
     * @param  string $number 订单编号
     * @return [type]         [description]
     */
    function buyResult($number=''){
        $e=Jwt::decode($number);
        if(!$e['success']||!isset($e['data'])){
            return json('订单数据有误',1);
        }
        $uid=$this->user['id'];
        $order=model('order')->read(['number'=>$e['data'],'uid'=>$uid]);
        if(empty($order)){
            return json('订单不存在',1);
        }
        if($order['state']){
            $rs=model('member')->read(['id'=>$uid],'id,coin_expire,coin');
            return json('订单支付成功',0,[
                "coin_expire"=>$rs['coin_expire'],
                "coin"=>$rs['coin'],
            ]);
        }
        return json('订单未支付',1);
    }
    /**
     * 获取微豆消费、来源记录
     * @param  integer $type -1:所有（默认） 0：消费 1：来源
     * @param  integer $page 分页数（默认1）
     * @return json
     */
    function log($type=-1){
        $map=[
            'uid'=>$this->user['id'],
        ];
        if($type>=0){
            $map['type']=$type;
        }
        $options=[
            'field'=>'id,time,nums,type,remark',
            'order'=>'time desc'
        ];
        $list=model('coinlog')->readAll($map,true,$options)->toArray();
        return json('',0,$list['data']);
    }
}